package com.gitee.cashzhang.test.basic.thread;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Cash Zhang
 * @version v1.0
 * @since 2019/05/23 10:30
 */
public class ListAdd2 {
  private volatile static List list = new ArrayList();

  public void add(){
    list.add("jianzh5");
  }
  public int size(){
    return list.size();
  }

  public static void main(String[] args) {

    final ListAdd2 list2 = new ListAdd2();
    final byte[] lock = new byte[0];
    Thread t1 = new Thread(new Runnable() {
      @Override
      public void run() {
        try {
          synchronized (lock) {
            System.out.println("t1启动..");
            for(int i = 0; i <10; i++){
              list2.add();
              System.out.println("当前线程：" + Thread.currentThread().getName() + "添加了一个元素..");
              Thread.sleep(500);
              if(list2.size() == 5){
                System.out.println("已经发出通知..");
                lock.notify();
              }
            }
          }
        } catch (InterruptedException e) {
          e.printStackTrace();
        }

      }
    }, "t1");

    Thread t2 = new Thread(new Runnable() {
      @Override
      public void run() {
        synchronized (lock) {
          System.out.println("t2启动..");
          if(list2.size() != 5){
            try {
              lock.wait();
            } catch (InterruptedException e) {
              e.printStackTrace();
            }
          }
          System.out.println("当前线程：" + Thread.currentThread().getName() + "收到通知线程停止..");
          throw new RuntimeException();
        }
      }
    }, "t2");
    t2.start();
    t1.start();
  }
}
